<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>04_Promise-Promise的resolve的值</title>
  <!-- 
  在 JavaScript 中， `Promise`  的  `resolve`  方法用于将  `Promise`  的状态从  `Pending` （待定）转换为  `Fulfilled` （已兑现），并可以返回一个值。这个值的处理方式对  `Promise`  的行为有重要影响。
  1.  `resolve`  方法的基本用法
  `Promise`  的  `resolve`  方法可以接受一个参数，这个参数可以是任意类型的值。调用  `resolve(value)`  会将  `Promise`  的状态设为  `Fulfilled` ，并将  `value`  作为结果值。
  const myPromise = new Promise((resolve, reject) => {
      resolve("Success!"); // 将 Promise 状态设为 Fulfilled，并返回 "Success!"
  });
  2.  `resolve`  值的处理

   2.1 普通值
  如果传递给  `resolve`  的是一个普通值（如字符串、数字、对象等），那么这个值将直接作为  `Promise`  的结果。
  const myPromise = new Promise((resolve, reject) => {
      resolve(42); // 结果值为 42
  });

  myPromise.then(result => {
      console.log(result); // 输出: 42
  });
   2.2 Promise 对象
  如果传递给  `resolve`  的值是另一个  `Promise`  对象，那么这个  `Promise`  的最终状态将决定当前  `Promise`  的状态。如果这个  `Promise`  被解决（fulfilled），当前  `Promise`  也会被解决；如果被拒绝（rejected），当前  `Promise`  也会被拒绝。
  const promise1 = new Promise((resolve) => {
      setTimeout(() => resolve("Resolved from promise1"), 1000);
  });

  const myPromise = new Promise((resolve, reject) => {
      resolve(promise1); // 传递另一个 Promise
  });

  myPromise.then(result => {
      console.log(result); // 输出: Resolved from promise1 (在 1 秒后)
  });
   2.3 异常情况
  如果传递给  `resolve`  的值是一个异常（抛出的错误），那么这个错误不会影响当前  `Promise`  的状态。相反，当前  `Promise`  会被成功解决，且错误不会被捕获。
  const myPromise = new Promise((resolve) => {
      resolve(new Error("This is an error")); // 结果值为一个 Error 对象
  });

  myPromise.then(result => {
      console.log(result); // 输出: Error: This is an error
  });
  3. 总结
  `Promise`  的  `resolve`  方法的值可以是普通值、另一个  `Promise`  对象或其他类型。理解这些值的处理方式对于有效使用  `Promise`  进行异步编程非常重要。通过合理使用  `resolve` ，可以构建出更灵活和强大的异步处理逻辑。
  -->
</head>
<body>

  <script>
    const p = new Promise((resolve, reject) => {
      // setTimeout(resolve, 1000, 'hello')
      setTimeout(() => {
        resolve('hello')
      }, 1000)
    })

    const promise = new Promise((resolve, reject) => {
      resolve(p)
    })

    promise.then(value => {
      console.log(value)
    })

    const promise2 = new Promise((resolve, reject) => {
      // 1.普通值
      // resolve([
      //   {name: "macbook", price: 9998, intro: "有点贵"},
      //   {name: "iPhone", price: 9.9, intro: "有点便宜"},
      // ])

      // 2.resolve(promise)
      // 如果resolve的值本身Promise对象, 那么当前的Promise的状态会有传入的Promise来决定
      // resolve(p)

      // 3.resolve(thenable对象)
      resolve({
        name: "kobe",
        then: function(resolve) {
          resolve(11111)
        }
      })
    })

    promise2.then(res => {
      console.log("then中拿到结果:", res)
    })

  </script>
  
</body>
</html>